/* * Sun Public License Notice * * The contents of this file are subject to the Sun Public License * Version 1.0 (the "License"). You may not use this file except in * compliance with the License. A copy of the License is available at * http://www.sun.com/ * * The Original Code is Forte for Java, Community Edition. The Initial * Developer of the Original Code is Sun Microsystems, Inc. Portions * Copyright 1997-2000 Sun Microsystems, Inc. All Rights Reserved. */ package org.netbeans.modules.objectbrowser; import org.openide.TopManager; import org.openide.DialogDescriptor; import org.openide.awt.Toolbar; import org.openide.awt.ToolbarButton; import org.openide.awt.ToolbarToggleButton; import org.openide.cookies.FilterCookie; import org.openide.cookies.ElementCookie; import org.openide.filesystems.FileObject; import org.openide.nodes.Children; import org.openide.nodes.Node; import org.openide.nodes.AbstractNode; import org.openide.loaders.DataFilter; import org.openide.loaders.DataFolder; import org.openide.loaders.DataObject; import org.openide.loaders.DataObjectFilter; import org.openide.loaders.DataLoader; import org.openide.src.nodes.SourceElementFilter; import org.openide.src.nodes.ClassElementFilter; import org.openide.util.HelpCtx; import org.openide.util.NbBundle; import org.openide.util.WeakListener; import java.awt.*; import java.awt.event.*; import java.awt.datatransfer.DataFlavor; import java.lang.reflect.Modifier; import java.beans.*; import java.util.Vector; import java.util.ArrayList; import java.util.ResourceBundle; import javax.infobus.*; import javax.swing.*; import javax.swing.border.*; /** * Producer of class hierarchy. * * @author Jan Jancura */ public class ClassBrowserHierarchyTranslator extends JPanel implements HierarchyTranslator, InfoBusMember, InfoBusDataProducer { /** Icons for buttons. */ static protected Icon iClass; static protected Icon iInterface; static protected Icon iOtherDOs; static protected Icon iBean; static protected Icon iMethod; static protected Icon iVariable; static protected Icon iConstructor; static protected Icon iPublic; static protected Icon iPackage; static protected Icon iProtected; static protected Icon iPrivate; static protected Icon iSorted; static protected Icon iExpand; static protected Icon iDetails; static protected Icon iTree; static { try { iClass = new ImageIcon (ClassBrowserHierarchyTranslator.class.getResource ("/org/netbeans/modules/objectbrowser/resources/class.gif")); // NOI18N iInterface = new ImageIcon (ClassBrowserHierarchyTranslator.class.getResource ("/org/netbeans/modules/objectbrowser/resources/interface.gif")); // NOI18N iOtherDOs = new ImageIcon (ClassBrowserHierarchyTranslator.class.getResource ("/org/netbeans/modules/objectbrowser/resources/otherDOs.gif")); // NOI18N iBean = new ImageIcon (ClassBrowserHierarchyTranslator.class.getResource ("/org/netbeans/modules/objectbrowser/resources/bean.gif")); // NOI18N iMethod = new ImageIcon (ClassBrowserHierarchyTranslator.class.getResource ("/org/netbeans/modules/objectbrowser/resources/method.gif")); // NOI18N iVariable = new ImageIcon (ClassBrowserHierarchyTranslator.class.getResource ("/org/netbeans/modules/objectbrowser/resources/variable.gif")); // NOI18N iConstructor = new ImageIcon (ClassBrowserHierarchyTranslator.class.getResource ("/org/netbeans/modules/objectbrowser/resources/constructor.gif")); // NOI18N iPublic = new ImageIcon (ClassBrowserHierarchyTranslator.class.getResource ("/org/netbeans/modules/objectbrowser/resources/public.gif")); // NOI18N iPackage = new ImageIcon (ClassBrowserHierarchyTranslator.class.getResource ("/org/netbeans/modules/objectbrowser/resources/package.gif")); // NOI18N iProtected = new ImageIcon (ClassBrowserHierarchyTranslator.class.getResource ("/org/netbeans/modules/objectbrowser/resources/protected.gif")); // NOI18N iPrivate = new ImageIcon (ClassBrowserHierarchyTranslator.class.getResource ("/org/netbeans/modules/objectbrowser/resources/private.gif")); // NOI18N iSorted = new ImageIcon (ClassBrowserHierarchyTranslator.class.getResource ("/org/netbeans/modules/objectbrowser/resources/sorted.gif")); // NOI18N iExpand = new ImageIcon (ClassBrowserHierarchyTranslator.class.getResource ("/org/netbeans/modules/objectbrowser/resources/expand.gif")); // NOI18N iDetails = new ImageIcon (ClassBrowserHierarchyTranslator.class.getResource ("/org/netbeans/modules/objectbrowser/resources/details.gif")); // NOI18N iTree = new ImageIcon (ClassBrowserHierarchyTranslator.class.getResource ("/org/netbeans/modules/objectbrowser/resources/tree.gif")); // NOI18N } catch (Throwable w) { w.printStackTrace (); } } // variables ............................................................................ private String infoBusName = PROPERTY_DEFAULT_INFO_BUS_NAME; private transient InfoBusMemberSupport ibms; private boolean connected = false; private boolean designTime = false; private transient PropertyChangeSupport pcs; // init ................................................................................. static final long serialVersionUID =7707795518722709661L; public ClassBrowserHierarchyTranslator () { init (); setPreferredSize (new Dimension (1, 1)); } protected void init () { pcs = new PropertyChangeSupport (this); ibms = new InfoBusMemberSupport (this); if (!designTime) connect (); } // HierarchyTranslator implementation ................................................... public String[] getFilterNames () { return new String[] { "Package", // NOI18N "Object", // NOI18N "Member", // NOI18N }; } public String[] getFilterComments () { return new String[] { "Check this option to see packages in this view.", // NOI18N "Check this option to see classes and interfaces in this view.", // NOI18N "Check this option to see variables and methods in this view.", // NOI18N }; } public Node translate (Node[] nodes, final boolean[] filter, HierarchyTranslator.Filter subFilter) { /* if ((nodes != null) && (nodes.length > 0)) S ystem.out.println ("translate " + nodes [0]); else S ystem.out.println ("translate " + nodes); S ystem.out.println (" filter " + filter [0] + ":" + filter [1] + ":" + filter [2]); S ystem.out.println (" subfilter " + subFilter); */ if (nodes == null) { if (!filter [0]) return new AbstractNode (Children.LEAF) { public String toString () { return "Root of packages [" + super.toString () + "]"; // NOI18N } }; return getPackagesHierarchy (filter, subFilter); } if (nodes.length < 1) return new AbstractNode (Children.LEAF) { public String toString () { return "Empty root of " + (filter [0] ? "packages" : (filter [1] ? "objects" : "members")) + " [" + super.toString () + "]"; // NOI18N } }; if (getType (nodes [0]) != -1) return getHierarchyForPackage ( (DataFolder) nodes [0].getCookie (DataFolder.class), filter, subFilter ); return getHierarchyForObject ( nodes [0], filter, subFilter ); } public HierarchyTranslator.Filter getFilter ( Node[] nodes, boolean[] filter, ExplorerBean explorerBean ) { if (filter [0]) return new PackageFilter (explorerBean); if (filter [1]) { ObjectFilter objectFilter = new ObjectFilter (); return objectFilter; } return new MemberFilter (); } // properties ........................................................................... public void setInfoBusName (String name) throws PropertyVetoException { String old = infoBusName; disconnect (); infoBusName = name; connect (); pcs.firePropertyChange ("infoBusName", old, infoBusName); // NOI18N } public String getInfoBusName () { return infoBusName; } // helper methods ................................................................. public void addNotify () { if (designTime) connect (); super.addNotify (); } public void removeNotify () { if (designTime) disconnect (); super.removeNotify (); } public String toString () { return "ClassBrowserHierarchyTranslator " + super.hashCode (); // NOI18N } private Node getPackagesHierarchy ( boolean[] filter, HierarchyTranslator.Filter subFilter ) { if (((PackageFilter)subFilter).isTree ()) return new TreeNode ( TopManager.getDefault ().getPlaces ().nodes ().repository () ); else return TopManager.getDefault ().getPlaces ().nodes ().packages ( ((PackageFilter) subFilter).getDataFilter () ); } DataObjectFilter ch; Node nnn; boolean otherDOs; private Node getHierarchyForPackage ( DataFolder df, boolean[] filter, HierarchyTranslator.Filter subFilter ) { boolean newOtherDOs = ((ObjectFilter)subFilter).otherDOs; if (ch == null) { // create new DOF ch = new DataObjectFilter (); otherDOs = true; //S ystem.out.println ("@ClassBrowserHierarchyTranslator.create "); // NOI18N } else if (newOtherDOs != otherDOs) // big changes ! ch.setDataFolder (null); if (otherDOs != newOtherDOs) { //S ystem.out.println ("@ClassBrowserHierarchyTranslator.change F! "); // NOI18N DataLoader[] loaders = TopManager.getDefault ().getLoaderPool ().toArray (); ArrayList as = new ArrayList (); int i, k = loaders.length; for (i = 0; i < k; i++) { Class c = loaders [i].getRepresentationClass (); if (ElementCookie.class.isAssignableFrom (c)) ch.addLoader (c); else if (newOtherDOs) ch.addLoader (c); else ch.removeLoader (c); } otherDOs = newOtherDOs; } // create SourceElementFilter int f = 0; int m = 0; if (((ObjectFilter)subFilter).classes) f += SourceElementFilter.CLASS; if (((ObjectFilter)subFilter).interfaces) f += SourceElementFilter.INTERFACE; if (((ObjectFilter)subFilter).publicC) m += SourceElementFilter.PUBLIC; if (((ObjectFilter)subFilter).privateC) m += SourceElementFilter.PRIVATE; if (((ObjectFilter)subFilter).protectedC) m += SourceElementFilter.PROTECTED; if (((ObjectFilter)subFilter).packageC) m += SourceElementFilter.PACKAGE; SourceElementFilter sef = new SourceElementFilter(); sef.setOrder (new int[] {f}); sef.setModifiers (m); sef.setAllClasses (true); // customize DOF //S ystem.out.println ("@ClassBrowserHierarchyTranslator.setDataFolder " + df.getPrimaryFile ()); // NOI18N DataFolder oldDf = ch.getDataFolder (); if ( (oldDf != null) && (df != null) && (oldDf.equals (df)) ) ch.putFilter (SourceElementFilter.class, sef); else { // optimalization magic... ch.setDataFolder (null); // to prevent refreshing of lod dataFolder ch.putFilter (SourceElementFilter.class, sef); ch.setDataFolder (df); } if (nnn == null) nnn = new AbstractNode (ch) { public String toString () { return "Root of objects [" + super.toString () + "]"; // NOI18N } }; return nnn; } private Node getHierarchyForObject ( Node n, boolean[] filter, HierarchyTranslator.Filter subFilter ) { ElementCookie ec = (ElementCookie) n.getCookie (ElementCookie.class); Node root = null; if (ec == null) root = n.cloneNode (); else root = ec.getElementsParent ().cloneNode (); FilterCookie fc = (FilterCookie) root.getCookie (FilterCookie.class); if (fc != null) { if (ClassElementFilter.class.isAssignableFrom (fc.getFilterClass ())) { ClassElementFilter cef = new ClassElementFilter (); int me = 0, fi = 0, co = 0; int m = 0; if (((MemberFilter) subFilter).publicC) m += SourceElementFilter.PUBLIC; if (((MemberFilter) subFilter).privateC) m += SourceElementFilter.PRIVATE; if (((MemberFilter) subFilter).protectedC) m += SourceElementFilter.PROTECTED; if (((MemberFilter) subFilter).packageC) m += SourceElementFilter.PACKAGE; if (((MemberFilter) subFilter).bean) { if (((MemberFilter) subFilter).sorted) { cef.setSorted (true); cef.setOrder (new int[] {256, 512, 1024}); } else { cef.setSorted (false); cef.setOrder (new int[] {256 + 512 + 1024}); } } else { if (((MemberFilter) subFilter).method) me = ClassElementFilter.METHOD; if (((MemberFilter) subFilter).variable) fi = ClassElementFilter.FIELD; if (((MemberFilter) subFilter).constructor) co = ClassElementFilter.CONSTRUCTOR; if (((MemberFilter) subFilter).sorted) { cef.setSorted (true); cef.setOrder (new int[] {fi, co, me}); } else { cef.setSorted (false); cef.setOrder (new int[] {me + fi + co}); } } cef.setModifiers (m); cef.setAllClasses (true); fc.setFilter (cef); } } return root; } private static int getType (Node n) {// VERY VERY PENDING (DO NOT SEE!) DataFolder df = (DataFolder) n.getCookie (DataFolder.class); if (df != null) return df.getPrimaryFile ().isRoot () ? 0 : 1; return -1; } // InfoBus support ................................................................. private void connect () { if (connected) return; try { ibms.joinInfoBus (infoBusName); } catch (InfoBusMembershipException e) { throw new InternalError (); } catch (PropertyVetoException e) { throw new InternalError (); } ibms.getInfoBus ().addDataProducer (this); connected = true; ibms.getInfoBus ().fireItemAvailable (PROPERTY_DEFAULT_TRANSLATOR_ITEM_NAME, null, this); } private void disconnect () { if (!connected) return; if (ibms.getInfoBus () == null) return; ibms.getInfoBus ().fireItemRevoked (PROPERTY_DEFAULT_TRANSLATOR_ITEM_NAME, this); ibms.getInfoBus ().removeDataProducer (this); try { ibms.leaveInfoBus (); } catch (InfoBusMembershipException e) { throw new InternalError (); } catch (PropertyVetoException e) { throw new InternalError (); } connected = false; } public void setInfoBus (InfoBus newInfoBus) throws PropertyVetoException { ibms.setInfoBus (newInfoBus); } public InfoBus getInfoBus () { return ibms.getInfoBus (); } public void addInfoBusVetoableListener (VetoableChangeListener vcl) { ibms.addInfoBusVetoableListener (vcl); } public void removeInfoBusVetoableListener (VetoableChangeListener vcl) { ibms.removeInfoBusVetoableListener (vcl); } public void addInfoBusPropertyListener (PropertyChangeListener pcl) { ibms.addInfoBusPropertyListener (pcl); } public void removeInfoBusPropertyListener (PropertyChangeListener pcl) { ibms.removeInfoBusPropertyListener (pcl); } public void propertyChange (PropertyChangeEvent e) { } public void dataItemRequested (InfoBusItemRequestedEvent e) { if (connected && e.getDataItemName ().equals (PROPERTY_DEFAULT_TRANSLATOR_ITEM_NAME)) e.setDataItem (this); } // innerclasses ......................................................................... static class PackageFilter implements HierarchyTranslator.Filter, PropertyChangeListener { private PropertyChangeSupport pcs; private ExplorerBean explorerBean; private JComboBox cbFilter; private ToolbarButton bExpandAll; private PackagesFilter packagesFilter; private DataFilter dataFilter; private PropertyChangeListener listener; private ObjectBrowserSettings obs = new ObjectBrowserSettings (); private boolean doNotListen = false; public PackageFilter (ExplorerBean explorerBean) { pcs = new PropertyChangeSupport (this); this.explorerBean = explorerBean; packagesFilter = obs.getPackageFilter (); dataFilter = packagesFilter.getDataFilter (); obs.addPropertyChangeListener (new WeakListener.PropertyChange (this)); } DataFilter getDataFilter () { return dataFilter; } boolean isTree () { return explorerBean.getExplorerViewClassName ().equals ( "org.openide.explorer.view.BeanTreeView"); // NOI18N } public java.awt.Component getComponent () { ResourceBundle bundle = NbBundle.getBundle (ClassBrowserHierarchyTranslator.class); JPanel pp = new JPanel (new BorderLayout ()); pp.setBorder (new CompoundBorder ( new EtchedBorder (EtchedBorder.LOWERED), new EmptyBorder (4, 4, 4, 4) )); JPanel p = new JPanel (new FlowLayout (FlowLayout.LEFT, 0, 0)); cbFilter = new JComboBox (packagesFilter.filterNames) { public boolean isFocusTraversable() { return false; } public float getAlignmentY () { return 0; } }; if (packagesFilter.index >= 0) cbFilter.setSelectedIndex (packagesFilter.index); Dimension ps = cbFilter.getPreferredSize (); ps.width = 100; cbFilter.setPreferredSize (ps); cbFilter.setMaximumSize (ps); cbFilter.addActionListener (new ActionListener () { public void actionPerformed (ActionEvent e) { if (doNotListen) return; packagesFilter.setSelected (cbFilter.getSelectedIndex ()); dataFilter = packagesFilter.getDataFilter (); pcs.firePropertyChange ("filter", null, null); // NOI18N } }); cbFilter.setEnabled (!isTree ()); p.add (cbFilter); JPanel s = new JPanel () { public float getAlignmentX () { return 0; } public float getAlignmentY () { return 0; } }; s.setMaximumSize (new Dimension (10, 10)); p.add (s); ToolbarToggleButton b = new ToolbarToggleButton (iTree, isTree ()); b.setToolTipText (bundle.getString ("CTL_ShowAsTree")); b.addActionListener (new ActionListener () { public void actionPerformed (ActionEvent e) { boolean v; if (((ToolbarToggleButton)e.getSource ()).isSelected () == (v = isTree ())) return; try { if (v) explorerBean.setExplorerViewClassName ( "org.openide.explorer.view.ListView" // NOI18N ); else explorerBean.setExplorerViewClassName ( "org.openide.explorer.view.BeanTreeView" // NOI18N ); bExpandAll.setEnabled (!v); } catch (PropertyVetoException ee) { ee.printStackTrace (); } } }); p.add (b); bExpandAll = new ToolbarButton (iExpand); bExpandAll.setToolTipText (bundle.getString ("CTL_ExpandAll")); bExpandAll.addActionListener (new ActionListener () { public void actionPerformed (ActionEvent e) { explorerBean.expandAll (); } }); bExpandAll.setEnabled (isTree ()); p.add (bExpandAll); s = new JPanel () { public float getAlignmentX () { return 0; } public float getAlignmentY () { return 0; } }; s.setMaximumSize (new Dimension (10, 10)); p.add (s); pp.add (p, "West"); // NOI18N ToolbarButton bb = new ToolbarButton (iDetails); bb.setEnabled (!isTree ()); bb.setToolTipText (bundle.getString ("CTL_SetPackageFilter")); bb.addActionListener (new ActionListener () { public void actionPerformed (ActionEvent e) { final PackageFilterPanel pfp = new PackageFilterPanel (); final Dialog[] d = new Dialog [1]; pfp.setPackagesFilter (packagesFilter); DialogDescriptor descr = new DialogDescriptor ( pfp, NbBundle.getBundle (ClassBrowserHierarchyTranslator.class).getString ("CTL_Package_filter"), true, // modal new ActionListener () { public void actionPerformed (ActionEvent e) { if (e.getSource ().equals (DialogDescriptor.OK_OPTION)) { dataFilter = (packagesFilter = pfp.getPackagesFilter ()).getDataFilter (); doNotListen = true; cbFilter.setModel (new DefaultComboBoxModel ( packagesFilter.filterNames )); doNotListen = false; if (packagesFilter.index >= 0) cbFilter.setSelectedIndex (packagesFilter.index); } d [0].setVisible (false); d [0].dispose (); } } ); descr.setHelpCtx (new HelpCtx (ClassBrowserHierarchyTranslator.class.getName () + ".dialog")); // NOI18N (d [0] = TopManager.getDefault ().createDialog (descr)).show (); } }); p.add (bb); pp.add (bb, "East"); // NOI18N return pp; } public void propertyChange (PropertyChangeEvent e) { packagesFilter = obs.getPackageFilter (); dataFilter = packagesFilter.getDataFilter (); if (cbFilter != null) { doNotListen = true; cbFilter.setModel (new DefaultComboBoxModel ( packagesFilter.filterNames )); doNotListen = false; if (packagesFilter.index >= 0) cbFilter.setSelectedIndex (packagesFilter.index); } } public void addPropertyChangeListener (PropertyChangeListener e) { pcs.addPropertyChangeListener (e); } public void removePropertyChangeListener (PropertyChangeListener e) { pcs.removePropertyChangeListener (e); } } static class ObjectFilter implements HierarchyTranslator.Filter { PropertyChangeSupport pcs; boolean classes = true; boolean interfaces = true; boolean otherDOs = true; boolean publicC = true; boolean privateC = true; boolean protectedC = true; boolean packageC = true; public ObjectFilter() { pcs = new PropertyChangeSupport (this); } public java.awt.Component getComponent () { ResourceBundle bundle = NbBundle.getBundle (ClassBrowserHierarchyTranslator.class); JToolBar p = new JToolBar (); p.setBorder (new CompoundBorder ( new EtchedBorder (EtchedBorder.LOWERED), new EmptyBorder (4, 4, 4, 4) )); p.setFloatable (false); ToolbarToggleButton b = new ToolbarToggleButton (iClass, true); b.setToolTipText (bundle.getString ("CTL_Class")); b.addActionListener (new ActionListener () { public void actionPerformed (ActionEvent e) { classes = ((AbstractButton)e.getSource ()).isSelected (); pcs.firePropertyChange ("class", null, null); // NOI18N } }); p.add (b); b = new ToolbarToggleButton (iInterface, true); b.setToolTipText (bundle.getString ("CTL_Interface")); b.addActionListener (new ActionListener () { public void actionPerformed (ActionEvent e) { interfaces = ((AbstractButton)e.getSource ()).isSelected (); pcs.firePropertyChange ("interface", null, null); // NOI18N } }); p.add (b); b = new ToolbarToggleButton (iOtherDOs, true); b.setToolTipText (bundle.getString ("CTL_OtherDOs")); b.addActionListener (new ActionListener () { public void actionPerformed (ActionEvent e) { otherDOs = ((AbstractButton)e.getSource ()).isSelected (); pcs.firePropertyChange ("otherDOs", null, null); // NOI18N } }); p.add (b); JPanel s = new JPanel () { public float getAlignmentX () { return 0; } public float getAlignmentY () { return 0; } }; s.setMaximumSize (new Dimension (10, 10)); p.add (s); b = new ToolbarToggleButton (iPublic, true); b.setToolTipText (bundle.getString ("CTL_Public")); b.addActionListener (new ActionListener () { public void actionPerformed (ActionEvent e) { publicC = ((AbstractButton)e.getSource ()).isSelected (); pcs.firePropertyChange ("public", null, null); // NOI18N } }); p.add (b); b = new ToolbarToggleButton (iPackage, true); b.setToolTipText (bundle.getString ("CTL_Package")); b.addActionListener (new ActionListener () { public void actionPerformed (ActionEvent e) { packageC = ((AbstractButton)e.getSource ()).isSelected (); pcs.firePropertyChange ("package", null, null); // NOI18N } }); p.add (b); b = new ToolbarToggleButton (iProtected, true); b.setToolTipText (bundle.getString ("CTL_Protected")); b.addActionListener (new ActionListener () { public void actionPerformed (ActionEvent e) { protectedC = ((AbstractButton)e.getSource ()).isSelected (); pcs.firePropertyChange ("protected", null, null); // NOI18N } }); p.add (b); b = new ToolbarToggleButton (iPrivate, true); b.setToolTipText (bundle.getString ("CTL_Private")); b.addActionListener (new ActionListener () { public void actionPerformed (ActionEvent e) { privateC = ((AbstractButton)e.getSource ()).isSelected (); pcs.firePropertyChange ("private", null, null); // NOI18N } }); p.add (b); return p; } public void addPropertyChangeListener (PropertyChangeListener e) { pcs.addPropertyChangeListener (e); } public void removePropertyChangeListener (PropertyChangeListener e) { pcs.removePropertyChangeListener (e); } } static class MemberFilter implements HierarchyTranslator.Filter { PropertyChangeSupport pcs; boolean bean = false; boolean method = true; boolean variable = true; boolean constructor = true; boolean publicC = true; boolean privateC = true; boolean protectedC = true; boolean packageC = true; boolean sorted = true; private ToolbarToggleButton bMethod; private ToolbarToggleButton bVariable; private ToolbarToggleButton bConstructor; private ToolbarToggleButton bPublic; private ToolbarToggleButton bPackage; private ToolbarToggleButton bProtected; private ToolbarToggleButton bPrivate; public MemberFilter () { pcs = new PropertyChangeSupport (this); } public java.awt.Component getComponent () { ResourceBundle bundle = NbBundle.getBundle (ClassBrowserHierarchyTranslator.class); JToolBar p = new JToolBar (); p.setBorder (new CompoundBorder ( new EtchedBorder (EtchedBorder.LOWERED), new EmptyBorder (4, 4, 4, 4) )); p.setFloatable (false); ToolbarToggleButton b = new ToolbarToggleButton (iBean, false); b.setToolTipText (bundle.getString ("CTL_Bean")); b.addActionListener (new ActionListener () { public void actionPerformed (ActionEvent e) { bean = ((AbstractButton)e.getSource ()).isSelected (); bMethod.setEnabled (!bean); bVariable.setEnabled (!bean); bConstructor.setEnabled (!bean); bPublic.setEnabled (!bean); bPackage.setEnabled (!bean); bProtected.setEnabled (!bean); bPrivate.setEnabled (!bean); pcs.firePropertyChange ("bean", null, null); // NOI18N } }); p.add (b); JPanel s = new JPanel () { public float getAlignmentX () { return 0; } public float getAlignmentY () { return 0; } }; s.setMaximumSize (new Dimension (10, 10)); p.add (s); bMethod = new ToolbarToggleButton (iMethod, true); bMethod.setToolTipText (bundle.getString ("CTL_Method")); bMethod.addActionListener (new ActionListener () { public void actionPerformed (ActionEvent e) { method = ((AbstractButton)e.getSource ()).isSelected (); pcs.firePropertyChange ("method", null, null); // NOI18N } }); p.add (bMethod); bVariable = new ToolbarToggleButton (iVariable, true); bVariable.setToolTipText (bundle.getString ("CTL_Variable")); bVariable.addActionListener (new ActionListener () { public void actionPerformed (ActionEvent e) { variable = ((AbstractButton)e.getSource ()).isSelected (); pcs.firePropertyChange ("variable", null, null); // NOI18N } }); p.add (bVariable); bConstructor = new ToolbarToggleButton (iConstructor, true); bConstructor.setToolTipText (bundle.getString ("CTL_Constructor")); bConstructor.addActionListener (new ActionListener () { public void actionPerformed (ActionEvent e) { constructor = ((AbstractButton)e.getSource ()).isSelected (); pcs.firePropertyChange ("constructor", null, null); // NOI18N } }); p.add (bConstructor); s = new JPanel () { public float getAlignmentX () { return 0; } public float getAlignmentY () { return 0; } }; s.setMaximumSize (new Dimension (10, 10)); p.add (s); bPublic = new ToolbarToggleButton (iPublic, true); bPublic.setToolTipText (bundle.getString ("CTL_Public")); bPublic.addActionListener (new ActionListener () { public void actionPerformed (ActionEvent e) { publicC = ((AbstractButton)e.getSource ()).isSelected (); pcs.firePropertyChange ("public", null, null); // NOI18N } }); p.add (bPublic); bPackage = new ToolbarToggleButton (iPackage, true); bPackage.setToolTipText (bundle.getString ("CTL_Package")); bPackage.addActionListener (new ActionListener () { public void actionPerformed (ActionEvent e) { packageC = ((AbstractButton)e.getSource ()).isSelected (); pcs.firePropertyChange ("package", null, null); // NOI18N } }); p.add (bPackage); bProtected = new ToolbarToggleButton (iProtected, true); bProtected.setToolTipText (bundle.getString ("CTL_Protected")); bProtected.addActionListener (new ActionListener () { public void actionPerformed (ActionEvent e) { protectedC = ((AbstractButton)e.getSource ()).isSelected (); pcs.firePropertyChange ("protected", null, null); // NOI18N } }); p.add (bProtected); bPrivate = new ToolbarToggleButton (iPrivate, true); bPrivate.setToolTipText (bundle.getString ("CTL_Private")); bPrivate.addActionListener (new ActionListener () { public void actionPerformed (ActionEvent e) { privateC = ((AbstractButton)e.getSource ()).isSelected (); pcs.firePropertyChange ("private", null, null); // NOI18N } }); p.add (bPrivate); s = new JPanel () { public float getAlignmentX () { return 0; } public float getAlignmentY () { return 0; } }; s.setMaximumSize (new Dimension (10, 10)); p.add (s); b = new ToolbarToggleButton (iSorted, true); b.setToolTipText (bundle.getString ("CTL_Sorted")); b.addActionListener (new ActionListener () { public void actionPerformed (ActionEvent e) { sorted = ((AbstractButton)e.getSource ()).isSelected (); pcs.firePropertyChange ("sorted", null, null); // NOI18N } }); p.add (b); return p; } public void addPropertyChangeListener (PropertyChangeListener e) { pcs.addPropertyChangeListener (e); } public void removePropertyChangeListener (PropertyChangeListener e) { pcs.removePropertyChangeListener (e); } } } /* * Log * 31 src-jtulach1.30 1/13/00 Radko Najman I18N * 30 src-jtulach1.29 12/15/99 Jan Jancura Bug 4906 * 29 src-jtulach1.28 12/13/99 Jan Jancura * 28 src-jtulach1.27 10/23/99 Ian Formanek NO SEMANTIC CHANGE - Sun * Microsystems copyright in file comment * 27 src-jtulach1.26 8/18/99 Jan Jancura Localization * 26 src-jtulach1.25 8/17/99 Jan Jancura Disable madifiers for * patterns package toolbar repaired change curent filter bug repaired * 25 src-jtulach1.24 8/9/99 Ian Formanek Generated Serial Version * UID * 24 src-jtulach1.23 8/5/99 Jan Jancura * 23 src-jtulach1.22 7/30/99 Jan Jancura * 22 src-jtulach1.21 7/28/99 Jan Jancura * 21 src-jtulach1.20 7/27/99 Jan Jancura * 20 src-jtulach1.19 7/21/99 Jan Jancura * 19 src-jtulach1.18 7/16/99 Ian Formanek Fixed bug #1800 - You * can drag off the explorer toolbar. * 18 src-jtulach1.17 7/9/99 Jesse Glick Context help. * 17 src-jtulach1.16 7/2/99 Jan Jancura Beans & sorting support * 16 src-jtulach1.15 6/11/99 Ian Formanek Fixed names of * packages... * 15 src-jtulach1.14 6/10/99 Jan Jancura OB settings & save of * filters * 14 src-jtulach1.13 6/9/99 Ian Formanek ---- Package Change To * org.openide ---- * 13 src-jtulach1.12 5/13/99 Jan Jancura * 12 src-jtulach1.11 5/12/99 Jan Jancura * 11 src-jtulach1.10 5/7/99 Jan Jancura * 10 src-jtulach1.9 5/7/99 Jan Jancura * 9 src-jtulach1.8 5/6/99 Jan Jancura * 8 src-jtulach1.7 4/21/99 Jan Jancura * 7 src-jtulach1.6 4/16/99 Jan Jancura * 6 src-jtulach1.5 4/9/99 Jan Jancura Borders in toolbars * changed * 5 src-jtulach1.4 4/8/99 Jan Jancura * 4 src-jtulach1.3 4/6/99 Ian Formanek Fixed last change * 3 src-jtulach1.2 4/6/99 Ian Formanek fixed obtaining * resources (Object.class.getResource -> getClass ().getResource) * 2 src-jtulach1.1 4/2/99 Jan Jancura * 1 src-jtulach1.0 3/23/99 Jan Jancura * $ */